home *** CD-ROM | disk | FTP | other *** search
/ PC Open 96 / PC Open 96 CD3.bin / fscommand / index.swf / scripts / %3Cdefault package%3E / SRT_PARSER.as next >
Encoding:
Text File  |  2004-01-08  |  4.6 KB  |  154 lines

  1. _global.SRT_CLASS = function()
  2. {
  3.    this.seekLength = 5000;
  4.    this.index = 0;
  5. };
  6. _global.SRT_CLASS.prototype.setOnData = function(target, method)
  7. {
  8.    this.onDataTarget = target;
  9.    this.onDataMethod = method;
  10. };
  11. _global.SRT_CLASS.prototype.getOnData = function()
  12. {
  13.    return this.onDataTarget[this.onDataMethod];
  14. };
  15. _global.SRT_CLASS.prototype.getBytesLoaded = function()
  16. {
  17.    return this.index;
  18. };
  19. _global.SRT_CLASS.prototype.getBytesTotal = function()
  20. {
  21.    return this.sSubtitle.length;
  22. };
  23. _global.SRT_CLASS.prototype.unload = function()
  24. {
  25.    clearInterval(this.seekInterval);
  26. };
  27. _global.SRT_CLASS.prototype.parse = function(str, subObj)
  28. {
  29.    this.sSubtitle = str;
  30.    this.subObj = subObj;
  31.    this.index = 0;
  32.    this.currentLine = 0;
  33.    this.lastElement = 0;
  34.    this.subIndex = null;
  35.    this.subStart = null;
  36.    this.subEnd = null;
  37.    this.subText = "";
  38.    this.lineArr = new Array();
  39.    this.seekInterval = setInterval(this,"seek",1000 / (_global.FPS + 1));
  40.    this.seek();
  41. };
  42. _global.SRT_CLASS.prototype.seek = function()
  43. {
  44.    var lastIndex;
  45.    var fragment;
  46.    var i;
  47.    var lineArr;
  48.    var sLine;
  49.    var frame;
  50.    lastIndex = this.sSubtitle.lastIndexOf("\r\n\r\n",this.index + this.seekLength);
  51.    lastindex += "\r\n\r\n".length;
  52.    if(lastIndex > this.index)
  53.    {
  54.       fragment = this.sSubtitle.substring(this.index,lastIndex - 2);
  55.       lineArr = fragment.split("\r\n");
  56.       this.index = lastIndex;
  57.    }
  58.    else
  59.    {
  60.       fragment = this.sSubtitle.substr(this.index);
  61.       lineArr = fragment.split("\r\n");
  62.       lineArr.push("");
  63.       this.index += fragment.length;
  64.    }
  65.    this.lastElement = 0;
  66.    i = 0;
  67.    while(i < lineArr.length)
  68.    {
  69.       this.currentLine = this.currentLine + 1;
  70.       sLine = lineArr[i];
  71.       if(i - this.lastElement == 0)
  72.       {
  73.          this.subIndex = parseInt(sLine);
  74.       }
  75.       else if(i - this.lastElement == 1)
  76.       {
  77.          this.parseTimestamp(sLine);
  78.       }
  79.       else if(sLine != "")
  80.       {
  81.          if(this.subText.length == 0)
  82.          {
  83.             this.subText = sLine;
  84.          }
  85.          else
  86.          {
  87.             this.subText += "\n" + sLine;
  88.          }
  89.       }
  90.       else
  91.       {
  92.          if(parseInt(this.subIndex) == this.subIndex && parseInt(this.subStart) == this.subStart && parseInt(this.subEnd) == this.subEnd && this.subText.length != 0)
  93.          {
  94.             frame = Math.round(this.subStart / 1000 * _global.FPS);
  95.             frame += 1;
  96.             this.subObj[frame] = {index:this.subIndex,end:Math.round(this.subEnd / 1000 * _global.FPS),text:this.subText};
  97.          }
  98.          this.lastElement = i + 1;
  99.          this.subIndex = null;
  100.          this.subStart = null;
  101.          this.subEnd = null;
  102.          this.subText = "";
  103.       }
  104.       i++;
  105.    }
  106.    if(this.index >= this.sSubtitle.length)
  107.    {
  108.       clearInterval(this.seekInterval);
  109.       this.onDataTarget[this.onDataMethod]();
  110.    }
  111. };
  112. _global.SRT_CLASS.prototype.parseTimestamp = function(sLine)
  113. {
  114.    var pattern;
  115.    var hours;
  116.    var minutes;
  117.    var seconds;
  118.    var milliseconds;
  119.    if(parseInt(pattern = sLine.substr(0,2)) == pattern && sLine.charAt(2) == ":")
  120.    {
  121.       hours = parseInt(pattern);
  122.       if(parseInt(pattern = sLine.substr(3,2)) == pattern && sLine.charAt(5) == ":")
  123.       {
  124.          minutes = parseInt(pattern);
  125.          if(parseInt(pattern = sLine.substr(6,2)) == pattern && sLine.charAt(8) == ",")
  126.          {
  127.             seconds = parseInt(pattern);
  128.             if(parseInt(pattern = sLine.substr(9,3)) == pattern && sLine.substr(12,5) == " --> ")
  129.             {
  130.                milliseconds = parseInt(pattern);
  131.                this.subStart = hours * 3600000 + minutes * 60000 + seconds * 1000 + milliseconds;
  132.                if(parseInt(pattern = sLine.substr(17,2)) == pattern && sLine.charAt(19) == ":")
  133.                {
  134.                   hours = parseInt(pattern);
  135.                   if(parseInt(pattern = sLine.substr(20,2)) == pattern && sLine.charAt(22) == ":")
  136.                   {
  137.                      minutes = parseInt(pattern);
  138.                      if(parseInt(pattern = sLine.substr(23,2)) == pattern && sLine.charAt(25) == ",")
  139.                      {
  140.                         seconds = parseInt(pattern);
  141.                         if(parseInt(pattern = sLine.substr(26,3)) == pattern)
  142.                         {
  143.                            milliseconds = parseInt(pattern);
  144.                            this.subEnd = hours * 3600000 + minutes * 60000 + seconds * 1000 + milliseconds;
  145.                         }
  146.                      }
  147.                   }
  148.                }
  149.             }
  150.          }
  151.       }
  152.    }
  153. };
  154.